[GAME-2] Acerte os rortões nas janelas (jogo com gráficos)

Publicado por Samuel Leonardo 26/11/2008

[ Hits: 5.811 ]

Homepage: localhost

Download [GAME2]Acerte o Portões na Janela.tar.gz




Meu segundo script, um jogo simples que mostra como funciona a colisão nos jogos e como simular o tiro de um canhão.

É bem legal, vocês devem conferir!

Acompanha uma versão pré-compilada.

ATENÇÃO: É necessário antes ter os arquivos de desenvolvimento da libSDL instalados.
                  
Para compilar:  gcc -o game game.c -lSDL

Para rodar: ./game
    

  



Esconder código-fonte

/*
#
#
###desenvolvido por: Samuel Leonardo (Sam L.) EM 20/11/2008
#######Historico de desenvolvimento:
#######  A idéia de fazer esse 'game' surgiu por falta do que fazer. :P
###########
#############  ATENÇÃO -> USUÁRIOS DE WINDOWS, NÃO SE OFENDAM PELO QUE FIZ COM O
#############  LOGO E O DESKTOP DESTE "escelêntiçimo e pherFEItiçimo çixtema" operacional,
#############  ACONTECE QUE NÃO CONSEGUI RESISTIR A FAZER UMA PIADA. hehe!!! bricadeira!!!
#######
#
#
########BAIXE UM EXECELENTE APOSTILA SOBRE DESENVOLVIMENTO DE JOGOS COM SDL AQUI:#########
##    http://silveira.wordpress.com/2006/09/21/apostila-de-desenvolvimento-de-jogos/    #
#################################################################
*/

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>

int Colisao(SDL_Rect *a, SDL_Rect *b)
{
   return (!((a->x > b->x + b->w)||(a->x + a->w < b->x)||(a->y > b->y + b->h)||(a->y + a->h < b->y)));
}



int main(int argc, char *argv[])
{
SDL_Init(SDL_INIT_VIDEO);

SDL_Surface *screen, *bala, *alvo[2], *efeito, *cannon, *obstaculo[2];

SDL_Rect destino,fonte[2], posicao;


screen = SDL_SetVideoMode(800, 350, 0, SDL_SWSURFACE | SDL_HWSURFACE | SDL_ANYFORMAT);

bala    = SDL_LoadBMP("Imagens/cabeca.bmp");
alvo[0] = SDL_LoadBMP("Imagens/monitor.bmp");
alvo[1] = SDL_LoadBMP("Imagens/windows-vista-logo.bmp");

efeito = SDL_LoadBMP("Imagens/fumaca.bmp");
cannon = SDL_LoadBMP("Imagens/tux-canhao.bmp");



SDL_SetColorKey(cannon, SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(cannon->format, 255, 255, 255));

destino = (SDL_Rect){40,240,20,20};//posição da bala
fonte[0] = (SDL_Rect){600, 240,40,40};//posição do XP, obstaculo[0]
fonte[1] = (SDL_Rect){700, 240,40,40};//posição do VISTA, obstaculo[1]
posicao = (SDL_Rect){0,220,0,0};   //posição do canhão


int fim = 0, i;

// a bala tem aceleração e velocidade
int velo = 0, acel = 1, atira = 0, acres_y = 4;


SDL_Event evento;

while(!fim)
{
Uint8 *teclado;
SDL_PumpEvents();
teclado = SDL_GetKeyState(0);

if(teclado[SDLK_ESCAPE]) fim = 1;

if(teclado[SDLK_UP] && !atira)
{
 posicao.y -= 10;
 destino.y = posicao.y + 20;
}

if(teclado[SDLK_DOWN] && !atira)
{
 posicao.y += 10;
 destino.y = posicao.y + 20;
}


while(SDL_PollEvent(&evento)) if(evento.type == SDL_QUIT) fim =1;

if(!atira)
{
if(teclado[SDLK_SPACE])
{
velo = 10;
atira = 1;
}
}


if(atira)
{
velo = velo - acel;
destino.y -= velo;
destino.x += 30;

for(i=0; i < 2;i++)
if(Colisao(&destino,&fonte[i]))
{
 SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format,255,255,255));
 atira = 0;
 destino.x = 40;
 destino.y = posicao.y + 20;
 SDL_BlitSurface(efeito, NULL, screen, &fonte[i]);
 SDL_Flip(screen);
 SDL_Delay(1500);
}
}

if(destino.x > 700)
{
 atira = 0;
 destino.x = 40;
 destino.y = posicao.y + 20;
}

if((fonte[0].y + fonte[0].h + acres_y > 350) || (fonte[0].y + acres_y < 0))
   acres_y = -acres_y;
fonte[0].y += acres_y;

SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format,255,255,255));

SDL_BlitSurface(bala, NULL, screen, &destino);
SDL_BlitSurface(alvo[0], NULL, screen, &fonte[0]);
SDL_BlitSurface(alvo[1], NULL, screen, &fonte[1]);
SDL_BlitSurface(cannon, NULL, screen, &posicao);

SDL_Flip(screen);
SDL_Delay(60);
}

SDL_Quit();
return 0;
}

Scripts recomendados

É 32 ou 64 bits?

Arvore AVL

Agenda eletrônica feita em C

Método de Newton Modificado p/ Raízes Multiplas

Lista Simplesmente Encadeada


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts